#include "update.h"
#include "ui_update.h"
#include "widget.h"
#include <QSqlQuery>
#include <QMessageBox>
#include "network.h"
#include "MessageType.h"
#include "tcpsocketsingleton.h"
#include <QVBoxLayout>

update::update(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::update)
{
    ui->setupUi(this);

    this->setWindowTitle("医生端");
    this->setWindowIcon(QIcon(":doctorimg/img/doctorIcon.png"));

    // 设置主窗口背景及控件样式
    this->setStyleSheet(
        "QWidget { background-color: rgba(255, 240, 245, 0.95); }" // 整体背景为浅粉色
        "QLabel { color: #880E4F; font-size: 24px; font-weight: bold; }" // 增大字体为24px
        "QLineEdit { min-height: 40px; background-color: rgba(255, 255, 255, 0.9); "
        "border: 2px solid #F48FB1; padding: 12px; border-radius: 10px; font-size: 20px; color: black; }" // 调整输入框
        "QPushButton { min-width: 100px; min-height: 40px; background-color: #F8BBD0; color: white; border: 2px solid #F48FB1; "
        "padding: 15px 30px; border-radius: 12px; font-size: 22px; font-weight: bold; }" // 按钮背景、字体及大小设置
        "QPushButton:hover { background-color: #F48FB1; }" // 悬停时按钮背景变深粉色
    );

    // 主布局设置
    QVBoxLayout *mainLayout = new QVBoxLayout(this);
    mainLayout->setAlignment(Qt::AlignCenter); // 垂直布局居中
    mainLayout->setSpacing(20); // 控件间距

    // 顶部标题部分
    QWidget *titleWidget = new QWidget(this);
    QGridLayout *titleLayout = new QGridLayout(titleWidget);
    titleLayout->addWidget(ui->label_6, 0, 0, 1, 2, Qt::AlignCenter); // 添加标题标签
    mainLayout->addWidget(titleWidget);

    // 个人信息布局
    QGridLayout *infoLayout = new QGridLayout();
    infoLayout->setSpacing(15); // 控件间距

    // 添加标签和输入框
    infoLayout->addWidget(ui->label, 0, 0); // 姓名标签
    infoLayout->addWidget(ui->name, 0, 1); // 姓名输入框
    infoLayout->addWidget(ui->label_3, 1, 0); // 年龄标签
    infoLayout->addWidget(ui->age, 1, 1); // 年龄输入框
    infoLayout->addWidget(ui->label_4, 2, 0); // 性别标签
    infoLayout->addWidget(ui->sex, 2, 1); // 性别输入框
    infoLayout->addWidget(ui->label_5, 3, 0); // 家庭地址标签
    infoLayout->addWidget(ui->address, 3, 1); // 家庭地址输入框
    infoLayout->addWidget(ui->label_7, 4, 0); // 手机号标签
    infoLayout->addWidget(ui->phone, 4, 1); // 手机号输入框
    infoLayout->addWidget(ui->label_2, 5, 0); // 密码标签
    infoLayout->addWidget(ui->password, 5, 1); // 密码输入框

    mainLayout->addLayout(infoLayout); // 将信息布局添加到主布局

    // 保存和退出按钮布局
    QHBoxLayout *buttonLayout = new QHBoxLayout();
    buttonLayout->addWidget(ui->save); // 添加保存按钮
    buttonLayout->addWidget(ui->quit); // 添加退出按钮
    mainLayout->addLayout(buttonLayout); // 将按钮布局添加到主布局

    // 设置主布局
    this->setLayout(mainLayout);

    // tcpSocket  = new QTcpSocket;
    // // tcpSocket->connectToHost("127.0.0.1", 12345);
    // if (tcpSocket->state() == QAbstractSocket::UnconnectedState) {
    //     tcpSocket->connectToHost("127.0.0.1", 12345);
    // }

    tcpSocket = TcpSocketSingleton::instance().socket();

    // 断开之前所有连接
    disconnect(tcpSocket, &QTcpSocket::readyRead, nullptr, nullptr);
    tcpSocket->flush();

    // 绑定槽函数，处理返回的响应
    connect(tcpSocket, &QTcpSocket::readyRead, this, &update::handleServerResponse);
}

update::~update()
{
    delete ui;
}

void update::on_quit_clicked()
{
    this->close(); // 关闭当前窗口
    // Widget *widget = new Widget(); // 创建新的 Widget 实例
    // widget->show(); // 显示新的 Widget
}

// 处理服务器返回的响应
void update::handleServerResponse()
{
    // // 读取服务器返回的字节数组
    // QByteArray responseData = tcpSocket->readAll();
    // // 假设服务器返回的响应是一个简单的字符串，表示成功或失败
    // QString responseText = QString::fromUtf8(responseData);
    // if (responseText == "SUCCESS") {
    //     QMessageBox::information(this, "Success", "Doctor information updated successfully.");
    // } else {
    //     QMessageBox::warning(this, "Error", "Failed to update doctor information.");
    // }
}

void update::updateDoctorInfo()
{
    // 获取输入框中的更新信息
    QString name = ui->name->text();
    QString sex = ui->sex->text();
    int age = ui->age->text().toInt();
    QString phone = ui->phone->text();
    QString address = ui->address->text();
    QString password = ui->password->text();

    // 向服务器发送请求进行更新医生信息
    QMap<QString, QString> data;
    data.insert("type", DOCTORUSRDATABASE); // 设置数据类型
    data.insert("databaseoperator", QString::number(UPDATE)); // 设置操作类型为更新
    data.insert("name", name);
    data.insert("phone", phone);
    data.insert("address", address);
    data.insert("age", QString::number(age));
    data.insert("sex", sex);
    data.insert("passward", password);

    // 将数据转换为 QByteArray 并发送
    QByteArray senddata = mapToByteArrayCustom(data);
    tcpSocket->write(senddata);
    // 由于服务器无返回值,默认插入成功
    QMessageBox::information(this, "Success", "医生信息更新成功");
}

void update::on_save_clicked()
{
    updateDoctorInfo(); // 更新医生信息
}
